# demo01_dict.py
info = {"name": "zhangsan", "age":18}
# 1. 查询
# 字典[key]: 如果key不存在，则报错
print(info["name"], info["age"])
# print(info["score"])  # 如果key不存在，则报错
# 字典.get(key, 默认值=None):
#   若key存在，则返回value，
#   不存在则返回默认值，默认值没有手动设置，则为None
print(info.get("name"), info.get("age"))
print(info.get("score"))  # None
print(info.get("score", 0))  # 0
# 字典.keys(): 获取所有的key
print(info.keys())  # ['name', 'age']
for key in info.keys():
    print("key: %s, value: %s" % (key, info[key]))
# 字典.values(): 获取所有的value
print(info.values())  # ['zhangsan', 18]
# 字典.items(): 获取所有的键值对
print(info.items())  # [('name', 'zhangsan'), ('age', 18)]
for item in info.items():
    print("item:", item)
# 2. 更新与添加
# 字典.update(新字典):
#   新字典中的key在原字典中存在，则是更新操作，不存在，则是添加操作
info.update({"age": 20, "score": 100})
print(info)
# 这两个  info.keys   info.values  出来的
# keys 和values的列表 是一一对应的吗
# 字典[key] = new_value:
#     如果key在原字典中存在，则是更新操作;不存在，则是添加操作
info["age"] = 30
info["gender"] = "nan"
print(info)
# 3. 其他
# len: 返回字典中键值对的个数
print(len(info))  # 4
# 字典的key必须是不可变的数据类型: str, int, tuple
# 如何判断数据是不可变还是可变的: hash(数据)
# 如果执行不报错，则该数据是不可变类型
# 4. 删除
# 字典.pop(key): 根据key弹出元素，并且把删掉的value进行返回
data = info.pop("age")
print(info, data)
# del: 删除指定的键值对，不返回数据
del info["name"]
print(info)
# 字典.clear(): 清空字典数据
info.clear()
print(info)
